3. 文件详解
Lab 1: C 语言入门 基础
gcd.c & prime.c
使用辗转相除法计算最大公约数,并判断素数。
int gcd(int a, int b) {
while (b != 0) { int t = b; b = a % b; a = t; }
return a;
}
convert.c
使用位操作将整数转换为二进制: (n >> i) & 1
Lab 2: 动态内存 基础
isort.c
动态分配数组,使用 qsort 排序。关键是提供比较函数指针。
twecho.c
复制 argv,大写转换,关键是双重释放:先释放每个字符串,再释放指针数组。
Lab 3: 链表库 核心
mylist.h / mylist.c
通用链表,使用 void *data 实现泛型。核心函数: addFront,
popFront, traverseList。
traverseList 接收函数指针,实现了 C 语言的多态。
Lab 4-5: 数据库工具 核心
mdb-lookup.c
从二进制文件加载 MdbRec 到链表,使用 strstr 搜索匹配项。
Lab 6: 网络编程 网络
mdb-lookup-server.c
TCP 服务器: socket → bind → listen → accept → recv/send → close。
重点: 使用 fdopen 将 socket 包装成 FILE*,便于用 fgets 读取。
http-client.c
HTTP 客户端: 构建 GET 请求,发送,解析响应头 (找 \r\n\r\n),保存 Body。
Lab 7: HTTP 服务器 网络
http-server.c
静态文件服务 + 反向代理。根据 URL 路由请求到不同处理逻辑。